#!/usr/bin/env python

################################################################################
# Python Standard Library
################################################################################

################################################################################
# Includes
################################################################################

from protocols.bn import BNPacket, BNSocket
from protocols.chat import ChatPacket, ChatSocket
from protocols.client import ClientPacket, ClientSocket

################################################################################
# Packets
################################################################################

################################################################################
# Packet Handlers
################################################################################

class BNCCPacket(BNPacket, ChatPacket, ClientPacket):
	"""
	Battle.net Chat Client Packet
	"""
	
	def __init__(self):
		BNPacket.__init__(self)
		ChatPacket.__init__(self)
		ClientPacket.__init__(self)
	
	def unpack(self):
		print "Unpacking BNCC packet..."
		
		self.dispatchEvent("unpack", (self,))
		
		print "BNCC packet unpacked."
	
	def pack(self):
		print "Packing BNCC packet..."
		
		self.dispatchEvent("pack", (self,))
		
		print "BNCC packet packed."
		
		return self.message

################################################################################
# Socket Handlers
################################################################################

class BNCCSocket(BNSocket, ChatSocket, ClientSocket):
	"""
	Battle.net Chat Client Socket
	"""
	
	def __init__(self, sock = None):
		BNSocket.__init__(self, sock)
		ChatSocket.__init__(self, sock)
		ClientSocket.__init__(self, sock)
	
	def unpackPackets(self):
		i, l = 0, len(self.data)
		
		while i < l:
			packet = BNCCPacket()
			packet.socket = self
			packet.messageLength = len(self.data)
			packet.message = self.data
			
			packet.unpack()
			
			self.packets.append(packet)
			
			i += packet.messageLength
		
		self.data = ''